package org.dioib.practice.zero;

public class MethodUtil {

    public static void main(String[] args) {
        demoThreadStackTrace();
        demoThrowableStackTrace();
        demoInnerClassMethod();
    }

    /**
     * 使用Thread.currentThread().getStackTrace()获取当前方法名
     * 注意：不同JDK版本下数组索引可能有所不同
     */
    public static void demoThreadStackTrace() {
        String methodName = Thread.currentThread().getStackTrace()[1].getMethodName();
        System.out.println("当前方法名 (Thread): " + methodName);
    }

    /**
     * 使用Throwable.getStackTrace()获取当前方法名
     */
    public static void demoThrowableStackTrace() {
        String methodName = new Throwable().getStackTrace()[0].getMethodName();
        System.out.println("当前方法名 (Throwable): " + methodName);
    }

    /**
     * 使用匿名内部类获取当前方法名
     */
    public static void demoInnerClassMethod() {
        String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
        System.out.println("当前方法名 (Inner Class): " + methodName);
    }

    /**
     * 获取调用者的方法名
     */
    public static String getCallerMethodName() {
        return Thread.currentThread().getStackTrace()[2].getMethodName();
    }
}
